package cn.itcast.service.impl;

import cn.itcast.dao.RoleDao;
import cn.itcast.entity.PageResult;
import cn.itcast.entity.QueryPageBean;
import cn.itcast.pojo.Role;
import cn.itcast.service.RoleService;
import com.alibaba.dubbo.config.annotation.Service;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.List;


@Service
public class RoleServiceImpl implements RoleService {

    @Autowired
    private RoleDao roleDao;

    /**
     * 查询角色管理列表
     * @param queryPageBean 查询条件
     * @return
     */
    @Override
    public PageResult findPage(QueryPageBean queryPageBean) {
        //开启分页查询
        PageHelper.startPage(queryPageBean.getCurrentPage(), queryPageBean.getPageSize());
        //根据条件分页查询检查项信息
        Page<Role>  page = roleDao.findPage(queryPageBean.getQueryString());
        //构建分页数据返回
        return new PageResult(page.getTotal(), page.getResult());
    }


    /**
     * 新增角色
     * @param permissionIds 权限id集合
     * @param menuIds 菜单id集合
     * @param role 角色基本信息
     * @return
     */
    @Override
    public Boolean handleAdd(int[] permissionIds, int[] menuIds, Role role) {
        //将角色信息添加到 role（角色表中）
        int result = roleDao.handleAdd(role);
        System.out.println("新增的角色id是：" + role.getId());
        if (result == 1){
            //将橘色对应的菜单id添加到t_role_menu表中
            for (int i = 0; i < menuIds.length; i++) {
                roleDao.addRoleToMenu(role.getId(), menuIds[i]);
            }

            //将角色对应的权限添加到t_role_permission表中
            for (int i = 0; i < permissionIds.length; i++) {
                roleDao.addRoleToPermission(role.getId(), permissionIds[i]);
            }
            return true;
        }
        return false;
    }


    /**
     *通过id查询角色信息
     * @param id 角色id
     * @return
     */
    @Override
    public Role findById(Integer id) {
        return roleDao.findById(id);
    }


    /**
     *通过角色id查询角色菜单id集合
     * @param id 角色id
     * @return
     */
    @Override
    public List<Integer> findMenuById(Integer id) {
        return roleDao.findMenuById(id);
    }


    /**
     *通过角色id查询角色权限id集合
     * @param id 角色id
     * @return
     */
    @Override
    public List<Integer> findPermissionById(Integer id) {
        return roleDao.findPermissionById(id);
    }


    /**
     * 编辑角色
     * @param permissionIds 权限id集合
     * @param menuIds 菜单id集合
     * @param role 角色基本信息
     * @return
     */
    @Override
    public Boolean handleEdit(int[] permissionIds, int[] menuIds, Role role) {
        try {
            //将角色信息更新到role（角色表中）
            roleDao.handleUpdate(role);

            //根据角色对应的id，删除t_role_menu表中的数据
            roleDao.deleteRoleToMenu(role.getId());
            //根据色对应的菜单id跟新到t_role_menu表中
            for (int i = 0; i < menuIds.length; i++) {
                roleDao.addRoleToMenu(role.getId(), menuIds[i]);
            }


            //根据角色对应的id，删除t_role_permission表中的数据
            roleDao.deleteRoleToPermission(role.getId());
            //将角色对应的权限添加到t_role_permission表中
            for (int i = 0; i < permissionIds.length; i++) {
                roleDao.addRoleToPermission(role.getId(), permissionIds[i]);
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }

        return false;
    }



    /**
     * 根据id删除角色
     * @param id  角色id
     * @return
     */
    @Override
    public Boolean handleDelete(Integer id) {
        //根据角色对应的id，删除t_role_menu表中的数据
        roleDao.deleteRoleToMenu(id);
        //根据角色对应的id，删除t_role_permission表中的数据
        roleDao.deleteRoleToPermission(id);
        //删除角色信息
        roleDao.handleDelete(id);
        return null;
    }


    /**
     * 查询所有角色
     * @return
     */
    @Override
    public List<Role> findAllRole() {
        return roleDao.findAllRole();
    }
}
